package com.yry.security;

import java.io.IOException;

import org.apache.commons.codec.binary.Base64;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * 单向加密：使用Base64加密及解密的几种方法
 * 加密、解密
 * JDK\BC\CC
 * @author Administrator
 *
 */
public class Base64Utils {
	/**
	 * JDK加密
	 * 使用jdk1.6(rt.jar版本,在jre/lib下)自带的算法
	 * 编码和解码的效率并不太好，而且在以后的Java版本可能就不被支援了，不建议使用。
	 * @param sourceStr
	 * @return
	 */
	public static String jdkEncode(String srcStr){
		BASE64Encoder encoder = new BASE64Encoder();
		String encode = encoder.encode(srcStr.getBytes());
		return encode;
	}
	/**
	 * JDK解密
	 * 使用jdk1.6(rt.jar版本,在jre/lib下)自带的算法
	 * 编码和解码的效率并不太好，而且在以后的Java版本可能就不被支援了，不建议使用。
	 * @param encipherStr
	 * @return
	 */
	public static String jdkDecode(String encipherStr){
		BASE64Decoder decoder = new BASE64Decoder();
		String decodeStr=null;
		try {
			decodeStr = new String(decoder.decodeBuffer(encipherStr));
		} catch (IOException e) {
			e.printStackTrace();
			return decodeStr;
		}  
		return decodeStr;	
	}
	/**
	 * JDK加密
	 * 最佳方法：
	 * 使用jdk自带的算法,JAVA version:1.8
	 * @param sourceStr
	 * @return
	 */
	public static String jdk8Encode(String srcStr){
		String encode = java.util.Base64.getEncoder().encodeToString(srcStr.getBytes());
		return encode;
	}
	/**
	 * JDK解密
	 * 最佳方法：
	 * 使用jdk自带的算法,JAVA version:1.8
	 * @param encipherStr
	 * @return
	 */
	public static String jdk8Decode(String encipherStr){
		byte[] decodeBytes = java.util.Base64.getDecoder().decode(encipherStr.getBytes());
		String decode = new String(decodeBytes);
		return decode;	
	}
	/**
	 * CC加密
	 * 第三方jar包：commons-codec-1.10.jar，Apache
	 * @param sourceStr
	 * @return
	 */
	public static String ccEncode(String srcStr){
		byte[] encodeBytes = Base64.encodeBase64(srcStr.getBytes());
		String encode = new String(encodeBytes);
		return encode;
	}
	/**
	 * CC解密
	 * 第三方jar包：commons-codec-1.10.jar，Apache
	 * @param encipherStr
	 * @return
	 */
	public static String ccDecode(String encipherStr){
		byte[] decodeBytes = Base64.decodeBase64(encipherStr.getBytes());
		String decode = new String(decodeBytes);
		return decode;	
	}
	
	/**
	 * BC加密
	 * 第三方jar包：bcprov-jdk15on-149.jar，Bouncy Castle
	 * @param sourceStr
	 * @return
	 */
	public static String bcEncode(String srcStr){
		byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.decode(srcStr);
		String encode = new String(encodeBytes);
		return encode;
	}
	/**
	 * BC解密
	 * 第三方jar包：bcprov-jdk15on-149.jar，Bouncy Castle
	 * @param encipherStr
	 * @return
	 */
	public static String bcDecode(String encipherStr){
		byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encipherStr.getBytes()); 
		String decode = new String(decodeBytes);
		return decode;	
	}		
  
}
